home *** CD-ROM | disk | FTP | other *** search
/ Programmer Power Tools / Programmer Power Tools.iso / progjrn / pj_7_3a.arc / LINEDEMO.C < prev    next >
Text File  |  1989-02-04  |  3KB  |  85 lines

  1. /*
  2.  * *** Listing 2 ***
  3.  *
  4.  * Sample program to illustrate EGA/VGA line drawing routines.
  5.  *
  6.  * Compiled with Turbo C 2.0.
  7.  *
  8.  * By Michael Abrash.  2/4/89.
  9.  */
  10. #include <dos.h>     /* contains geninterrupt */
  11.  
  12. #define GRAPHICS_MODE   0x10
  13. #define TEXT_MODE       0x03
  14. #define BIOS_VIDEO_INT  0x10
  15. #define X_MAX           640      /* working screen width */
  16. #define Y_MAX           348      /* working screen height */
  17.  
  18. extern void EVGALine();
  19.  
  20. /*
  21.  * Subroutine to draw a rectangle full of vectors, of the specified
  22.  * length and color, around the specified rectangle center.
  23.  */
  24. void VectorsUp(XCenter, YCenter, XLength, YLength, Color)
  25. int XCenter, YCenter;   /* center of rectangle to fill */
  26. int XLength, YLength;   /* distance from center to edge
  27.                            of rectangle */
  28. int Color;              /* color to draw lines in */
  29. {
  30.    int WorkingX, WorkingY;
  31.  
  32.    /* Lines from center to top of rectangle */
  33.    WorkingX = XCenter - XLength;
  34.    WorkingY = YCenter - YLength;
  35.    for ( ; WorkingX < ( XCenter + XLength ); WorkingX++ )
  36.       EVGALine(XCenter, YCenter, WorkingX, WorkingY, Color);
  37.  
  38.    /* Lines from center to right of rectangle */
  39.    WorkingX = XCenter + XLength - 1;
  40.    WorkingY = YCenter - YLength;
  41.    for ( ; WorkingY < ( YCenter + YLength ); WorkingY++ )
  42.       EVGALine(XCenter, YCenter, WorkingX, WorkingY, Color);
  43.  
  44.    /* Lines from center to bottom of rectangle */
  45.    WorkingX = XCenter + XLength - 1;
  46.    WorkingY = YCenter + YLength - 1;
  47.    for ( ; WorkingX >= ( XCenter - XLength ); WorkingX-- )
  48.       EVGALine(XCenter, YCenter, WorkingX, WorkingY, Color);
  49.  
  50.    /* Lines from center to left of rectangle */
  51.    WorkingX = XCenter - XLength;
  52.    WorkingY = YCenter + YLength - 1;
  53.    for ( ; WorkingY >= ( YCenter - YLength ); WorkingY-- )
  54.       EVGALine(XCenter, YCenter, WorkingX, WorkingY, Color );
  55. }
  56.  
  57. /*
  58.  * Sample program to draw four rectangles full of lines.
  59.  */
  60. int main()
  61. {
  62.    char temp;
  63.  
  64.    /* Set graphics mode */
  65.    _AX = GRAPHICS_MODE;
  66.    geninterrupt(BIOS_VIDEO_INT);
  67.  
  68.    /* Draw each of four rectangles full of vectors */
  69.    VectorsUp(X_MAX / 4, Y_MAX / 4, X_MAX / 4,
  70.       Y_MAX / 4, 1);
  71.    VectorsUp(X_MAX * 3 / 4, Y_MAX / 4, X_MAX / 4,
  72.       Y_MAX / 4, 2);
  73.    VectorsUp(X_MAX / 4, Y_MAX * 3 / 4, X_MAX / 4,
  74.       Y_MAX / 4, 3);
  75.    VectorsUp(X_MAX * 3 / 4, Y_MAX * 3 / 4, X_MAX / 4,
  76.       Y_MAX / 4, 4);
  77.  
  78.    /* Wait for the enter key to be pressed */
  79.    scanf("%c", &temp);
  80.  
  81.    /* Back to text mode */
  82.    _AX = TEXT_MODE;
  83.    geninterrupt(BIOS_VIDEO_INT);
  84. }
  85.